Android 7.0对受信任的证书颁发机构做出变更
在 Android Nougat (7.0) 中,我们更改了 Android 处理受信任证书颁发机构 (CA) 的方式,从而提供了更安全的系统默认设置,保障了应用流量安全。大多数应用和用户不受这些变更的影响,也不需要采取任何行动。这些变更包括:
安全而简单的 API,用于信任自定义 CA。
默认情况下,针对 API 级别 24 及以上版本而开发的应用不再信任用户或管理员为安全连接添加的 CA。
所有运行 Android Nougat 的设备均提供同一套标准化的系统 CA,而没有任何设备特定的自定义 CA。
如需详细了解这些变更以及倘若这些变更影响到您,您应当如何应对,请继续阅读本文。
1. 出于调试目的信任自定义 CA
要允许应用仅出于本地调试目的而信任自定义 CA,请在您的网络安全性配置中加入如下代码。只有在您的应用被标记为可调试时,才会信任这些 CA。
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</domain-config>
</network-security-config>
2. 针对某个域信任自定义 CA
要允许应用仅针对特定域信任自定义 CA,请在您的网络安全性配置中加入如下代码。
<network-security-config>
<domain-config>
<domain includeSubdomains="true">internal.example.com</domain>
<trust-anchors>
<!-- Only trust the CAs included with the app
for connections to internal.example.com -->
<certificates src="@raw/cas" />
</trust-anchors>
</domain-config>
</network-security-config>
3. 针对某些域信任用户添加的 CA
要允许应用针对多个域信任用户添加的 CA,请在您的网络安全性配置中加入如下代码。
<network-security-config>
<domain-config>
<domain includeSubdomains="true">userCaDomain.com</domain>
<domain includeSubdomains="true">otherUserCaDomain.com</domain>
<trust-anchors>
<!-- Trust preinstalled CAs -->
<certificates src="system" />
<!-- Additionally trust user added CAs -->
<certificates src="user" />
</trust-anchors>
</domain-config>
</network-security-config>
4. 针对除特定域之外的所有域信任用户添加的 CA
要允许应用针对除指定域之外的所有域信任用户添加的 CA,请在您的网络安全性配置中加入如下代码。
<network-security-config>
<base-config>
<trust-anchors>
<!-- Trust preinstalled CAs -->
<certificates src="system" />
<!-- Additionally trust user added CAs -->
<certificates src="user" />
</trust-anchors>
</base-config>
<domain-config>
<domain includeSubdomains="true">sensitive.example.com</domain>
<trust-anchors>
<!-- Only allow sensitive content to be exchanged
with the real server and not any user or
admin configured MiTMs -->
<certificates src="system" />
<trust-anchors>
</domain-config>
</network-security-config>
5. 针对所有安全连接信任用户添加的 CA
要允许应用针对所有安全连接信任用户添加的 CA,请在您的网络安全性配置中加入如下代码。
<network-security-config>
<base-config>
<trust-anchors>
<!-- Trust preinstalled CAs -->
<certificates src="system" />
<!-- Additionally trust user added CAs -->
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
为了在整个 Android 生态系统中提供更一致、更安全的体验,从 Android Nougat 开始,兼容的设备将仅信任在 AOSP 中维护的标准化系统 CA。
在此之前,随系统捆绑预装的 CA 会随设备不同而不同。如果某些设备并不包含应用连接所需的 CA,这可能会导致兼容性问题,而如果某些设备上包含的 CA 不符合我们的安全要求,还可能导致潜在的安全问题。
如果您运营某个认为应当包含在 Android 中的 CA,请先完成 Mozilla CA 纳入流程,然后提交针对 Android 的功能请求,以将此 CA 添加到标准化系统 CA 中。
查看文中所有链接,请点击文末阅读原文。
7.21 Google Doodle: 2016 年比利时国庆日